/*
Copyright (C) 2008 raohmaru <http://www.raohmaru.com>

This file is part of Raohmaru AS3 Framework.

Raohmaru AS3 Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Raohmaru AS3 Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with Raohmaru AS3 Framework.  If not, see <http://www.gnu.org/licenses/>.
*/

package jp.raohmaru.events 
{
import flash.events.Event;

/**
 * La clase YouTubeEvent define eventos asociados a un reproductor de YouTube de la clase YouTubePlayer.
 * Incluyen lo siguiente:
<ul>
	<li><code>AssetLoaderEvent.READY</code>: se distribuye cuando el reproductor está listo para interactuar.</li>
	<li><code>AssetLoaderEvent.ERROR</code>: se distribuye cuando se cada vez que cambia el estado del reproductor.</li>
	<li><code>AssetLoaderEvent.STATE_CHANGE</code>: se distribuye cada vez que cambia el estado del reproductor.</li>
	<li><code>AssetLoaderEvent.QUALITY_CHANGE</code>: se distribuye cada vez que cambia la calidad de reproducción del vídeo.</li>
</ul>
 * @see jp.raohmaru.media.YouTubePlayer
 * @author raohmaru
 * @version 1.0
 */
public class YouTubeEvent extends Event 
{
	/**
	 * Define el valor de la propiedad <code>type</code> para un objeto de evento <code>ready</code>. 
	 */
	public static const	READY :String = "onReady";
	/**
	 * Define el valor de la propiedad <code>type</code> para un objeto de evento <code>error</code>. 
	 */
	public static const	ERROR :String = "onError";
	/**
	 * Define el valor de la propiedad <code>type</code> para un objeto de evento <code>stateChange</code>. 
	 */
	public static const	STATE_CHANGE :String = "onStateChange";
	/**
	 * Define el valor de la propiedad <code>type</code> para un objeto de evento <code>qualityChange</code>. 
	 */
	public static const	QUALITY_CHANGE :String = "onPlaybackQualityChange";

	private var _data :Object;
	
	/**
	 * Obtiene los datos asociados a un objeto YouTubeEvent.
	 * @return Objeto procedente de un evento de la API de YouTube.
	 */
	public function get data() :Object
	{
		return _data;
	}	
	
	/**
	 * Crea un nuevo objeto YouTubeEvent con los parámetros especificados.
	 * @param type Tipo de evento; este valor identifica la acción que ha activado el evento.
	 * @param data Objeto de datos obtenidos de un evento de la API de YouTube.
	 */
	public function YouTubeEvent(type :String, data :Object=null)
	{
		super(type);
		_data = data;
	}
	
	/**
	 * Devuelve una cadena con todas las propiedades del objeto YouTubeEvent.
	 * La cadena tiene el siguiente formato:
	 * 
	 * <p>[<code>YouTubeEvent type=<em>value</em> data=<em>position</em>
	 * bubbles=<em>value</em> cancelable=<em>value</em>]</p>
	 *
     * @return Una representación de cadena del objeto DragEvent
	 */
	override public function toString() :String 
	{
		return formatToString("YouTubeEvent", "type", "data", "bubbles", "cancelable");
	}

	/**
	 * Crea una copia del objeto YouTubeEvent y define el valor de cada parámetro para que coincida con el original.
     * @return Copia de la instancia de YouTubeEvent actual.
	 */
	override public function clone() :Event
	{
		return new YouTubeEvent(type, data);
	}
}
}